#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 205;
const int M = 1e9 + 7;

struct Edge
{
    int to, next;
} e[N << 1];

int head[N], idx = 1;

void add_edge(int u, int v)
{
    e[idx].to = v;
    e[idx].next = head[u];
    head[u] = idx++;
}
void clear_graph()
{
    memset(head, -1, sizeof(head));
    memset(e, 0, sizeof(e));
    idx = 1;
}

inline ll inv(ll a, ll p = M)
{
    return (a == 1) ? 1 : inv(p % a, p) * (p - p / a) % p;
}

// a/b % p
ll frac_inv(ll a, ll b, ll p = M)
{
    return ((a % p) * inv(b, p)) % p;
}

int n;
int siz[N], siz2[N], path[N];
int dp[N][N];

void init()
{
    clear_graph();
    for (int i = 1; i <= N; i++)
    {
        dp[0][i] = 1;
        dp[i][0] = 0;
    }
    for (int i = 1; i < N; i++)
        for (int j = 1; j < N; j++)
            dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) * inv(2) % M;
}

// 跑每个子树的大小
void dfs1(int u, int f = -1)
{
    siz[u] = 1;
    for (int i = head[u]; ~i; i = e[i].next)
    {
        int j = e[i].to;
        if (j != f) {
            dfs1(j, u);
            siz[u] += siz[j];
        }
    }
}

ll ans = 0;
// 第二趟算dp, rt->u的所有链, siz2[N]记录除了链上节点以外子节点数目
void dfs2(int u, int rt, int f = -1, int d = 1)
{
   
    if (u < rt) {
        for(int i=0;i<=d-1;i++) {
            ans=(ans+frac_inv(siz2[i],n)*dp[i][d-i]%M)%M;
        }
    }
    for (int i = head[u]; ~i; i = e[i].next)
    {
        int j = e[i].to;
        if (j != f)
        {
            siz2[d] = siz[u] - siz[j];
            dfs2(j, rt, u, d + 1);
        }
    }
}
int main()
{
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    ios::sync_with_stdio(false), cin.tie(0);
    cin >> n;
    init();
    for (int i = 1; i <= n - 1; i++)
    {
        int x, y;
        cin >> x >> y;
        add_edge(x, y), add_edge(y, x);
    }

    for (int i = 1; i <= n; i++)
    {
        dfs1(i);
        dfs2(i, i);
    }
    cout << ans % M << endl;
    return 0;
}